home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / mips / include / asm / ptrace.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  4.0 KB  |  152 lines

  1. /*
  2.  * This file is subject to the terms and conditions of the GNU General Public
  3.  * License.  See the file "COPYING" in the main directory of this archive
  4.  * for more details.
  5.  *
  6.  * Copyright (C) 1994, 95, 96, 97, 98, 99, 2000 by Ralf Baechle
  7.  * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
  8.  */
  9. #ifndef _ASM_PTRACE_H
  10. #define _ASM_PTRACE_H
  11.  
  12. /* 0 - 31 are integer registers, 32 - 63 are fp registers.  */
  13. #define FPR_BASE    32
  14. #define PC        64
  15. #define CAUSE        65
  16. #define BADVADDR    66
  17. #define MMHI        67
  18. #define MMLO        68
  19. #define FPC_CSR        69
  20. #define FPC_EIR        70
  21. #define DSP_BASE    71        /* 3 more hi / lo register pairs */
  22. #define DSP_CONTROL    77
  23. #define ACX        78
  24.  
  25. /*
  26.  * This struct defines the way the registers are stored on the stack during a
  27.  * system call/exception. As usual the registers k0/k1 aren't being saved.
  28.  */
  29. struct pt_regs {
  30. #ifdef CONFIG_32BIT
  31.     /* Pad bytes for argument save space on the stack. */
  32.     unsigned long pad0[6];
  33. #endif
  34.  
  35.     /* Saved main processor registers. */
  36.     unsigned long regs[32];
  37.  
  38.     /* Saved special registers. */
  39.     unsigned long cp0_status;
  40.     unsigned long hi;
  41.     unsigned long lo;
  42. #ifdef CONFIG_CPU_HAS_SMARTMIPS
  43.     unsigned long acx;
  44. #endif
  45.     unsigned long cp0_badvaddr;
  46.     unsigned long cp0_cause;
  47.     unsigned long cp0_epc;
  48. #ifdef CONFIG_MIPS_MT_SMTC
  49.     unsigned long cp0_tcstatus;
  50. #endif /* CONFIG_MIPS_MT_SMTC */
  51. } __attribute__ ((aligned (8)));
  52.  
  53. /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
  54. #define PTRACE_GETREGS        12
  55. #define PTRACE_SETREGS        13
  56. #define PTRACE_GETFPREGS        14
  57. #define PTRACE_SETFPREGS        15
  58. /* #define PTRACE_GETFPXREGS        18 */
  59. /* #define PTRACE_SETFPXREGS        19 */
  60.  
  61. #define PTRACE_OLDSETOPTIONS    21
  62.  
  63. #define PTRACE_GET_THREAD_AREA    25
  64. #define PTRACE_SET_THREAD_AREA    26
  65.  
  66. /* Calls to trace a 64bit program from a 32bit program.  */
  67. #define PTRACE_PEEKTEXT_3264    0xc0
  68. #define PTRACE_PEEKDATA_3264    0xc1
  69. #define PTRACE_POKETEXT_3264    0xc2
  70. #define PTRACE_POKEDATA_3264    0xc3
  71. #define PTRACE_GET_THREAD_AREA_3264    0xc4
  72.  
  73. /* Read and write watchpoint registers.  */
  74. enum pt_watch_style {
  75.     pt_watch_style_mips32,
  76.     pt_watch_style_mips64
  77. };
  78. struct mips32_watch_regs {
  79.     unsigned int watchlo[8];
  80.     /* Lower 16 bits of watchhi. */
  81.     unsigned short watchhi[8];
  82.     /* Valid mask and I R W bits.
  83.      * bit 0 -- 1 if W bit is usable.
  84.      * bit 1 -- 1 if R bit is usable.
  85.      * bit 2 -- 1 if I bit is usable.
  86.      * bits 3 - 11 -- Valid watchhi mask bits.
  87.      */
  88.     unsigned short watch_masks[8];
  89.     /* The number of valid watch register pairs.  */
  90.     unsigned int num_valid;
  91. } __attribute__((aligned(8)));
  92.  
  93. struct mips64_watch_regs {
  94.     unsigned long long watchlo[8];
  95.     unsigned short watchhi[8];
  96.     unsigned short watch_masks[8];
  97.     unsigned int num_valid;
  98. } __attribute__((aligned(8)));
  99.  
  100. struct pt_watch_regs {
  101.     enum pt_watch_style style;
  102.     union {
  103.         struct mips32_watch_regs mips32;
  104.         struct mips32_watch_regs mips64;
  105.     };
  106. };
  107.  
  108. #define PTRACE_GET_WATCH_REGS    0xd0
  109. #define PTRACE_SET_WATCH_REGS    0xd1
  110.  
  111. #ifdef __KERNEL__
  112.  
  113. #include <linux/compiler.h>
  114. #include <linux/linkage.h>
  115. #include <linux/types.h>
  116. #include <asm/isadep.h>
  117.  
  118. struct task_struct;
  119.  
  120. extern int ptrace_getregs(struct task_struct *child, __s64 __user *data);
  121. extern int ptrace_setregs(struct task_struct *child, __s64 __user *data);
  122.  
  123. extern int ptrace_getfpregs(struct task_struct *child, __u32 __user *data);
  124. extern int ptrace_setfpregs(struct task_struct *child, __u32 __user *data);
  125.  
  126. extern int ptrace_get_watch_regs(struct task_struct *child,
  127.     struct pt_watch_regs __user *addr);
  128. extern int ptrace_set_watch_regs(struct task_struct *child,
  129.     struct pt_watch_regs __user *addr);
  130.  
  131. /*
  132.  * Does the process account for user or for system time?
  133.  */
  134. #define user_mode(regs) (((regs)->cp0_status & KU_MASK) == KU_USER)
  135.  
  136. #define instruction_pointer(regs) ((regs)->cp0_epc)
  137. #define profile_pc(regs) instruction_pointer(regs)
  138.  
  139. extern asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit);
  140.  
  141. extern NORET_TYPE void die(const char *, const struct pt_regs *) ATTRIB_NORET;
  142.  
  143. static inline void die_if_kernel(const char *str, const struct pt_regs *regs)
  144. {
  145.     if (unlikely(!user_mode(regs)))
  146.         die(str, regs);
  147. }
  148.  
  149. #endif
  150.  
  151. #endif /* _ASM_PTRACE_H */
  152.